const LANG3_TO_NAME = {
  afr: 'afrikaans',
  amh: 'amharic',
  arb: 'arabic',
  asm: 'assamese',
  azj: 'azerbaijani',
  bak: 'bashkir',
  bel: 'belarusian',
  ben: 'bengali',
  bod: 'tibetan',
  bos: 'bosnian',
  bre: 'breton',
  bul: 'bulgarian',
  cat: 'catalan',
  ces: 'czech',
  cmn: 'chinese',
  cym: 'welsh',
  dan: 'danish',
  deu: 'german',
  ell: 'greek',
  eng: 'english',
  est: 'estonian',
  eus: 'basque',
  fao: 'faroese',
  fin: 'finnish',
  fra: 'french',
  glg: 'galician',
  guj: 'gujarati',
  hat: 'haitian creole',
  hau: 'hausa',
  haw: 'hawaiian',
  heb: 'hebrew',
  hin: 'hindi',
  hrv: 'croatian',
  hun: 'hungarian',
  hye: 'armenian',
  ind: 'indonesian',
  isl: 'icelandic',
  ita: 'italian',
  jav: 'javanese',
  jpn: 'japanese',
  kan: 'kannada',
  kat: 'georgian',
  kaz: 'kazakh',
  khk: 'mongolian',
  khm: 'khmer',
  kor: 'korean',
  lao: 'lao',
  lat: 'latin',
  lin: 'lingala',
  lit: 'lithuanian',
  ltz: 'luxembourgish',
  lvs: 'latvian',
  mal: 'malayalam',
  mar: 'marathi',
  mkd: 'macedonian',
  mlg: 'malagasy',
  mlt: 'maltese',
  mri: 'maori',
  mya: 'myanmar',
  nld: 'dutch',
  nno: 'nynorsk',
  nob: 'norwegian',
  npi: 'nepali',
  oci: 'occitan',
  pan: 'punjabi',
  pbt: 'pashto',
  pes: 'persian',
  pol: 'polish',
  por: 'portuguese',
  ron: 'romanian',
  rus: 'russian',
  san: 'sanskrit',
  sin: 'sinhala',
  slk: 'slovak',
  slv: 'slovenian',
  sna: 'shona',
  snd: 'sindhi',
  som: 'somali',
  spa: 'spanish',
  sqi: 'albanian',
  srp: 'serbian',
  sun: 'sundanese',
  swe: 'swedish',
  swh: 'swahili',
  tam: 'tamil',
  tat: 'tatar',
  tel: 'telugu',
  tgk: 'tajik',
  tgl: 'tagalog',
  tha: 'thai',
  tuk: 'turkmen',
  tur: 'turkish',
  ukr: 'ukrainian',
  urd: 'urdu',
  uzn: 'uzbek',
  vie: 'vietnamese',
  yid: 'yiddish',
  yor: 'yoruba',
  zlm: 'malay',
};

export function getLanguageFromThreeLetterCode(
  lang3Code: string,
): string | null {
  try {
    const name = LANG3_TO_NAME[lang3Code] ?? null;
    if (name == null) {
      return null;
    }
    const capitalizedWords = name
      .split(' ')
      .map((word: string) => word[0].toUpperCase() + word.slice(1));
    return capitalizedWords.join(' ');
  } catch (e) {
    console.warn(`Unable to get language name for code ${lang3Code}: ${e}`);
  }
  return null;
}
